1.20. Архивы и установочные пакеты
Архивы и установочные пакеты
Для распространения программ используются архивы и установочные пакеты. Они позволяют упаковать все необходимые файлы в один контейнер, что упрощает загрузку и установку. Архивы используются для сжатия файлов, чтобы уменьшить их размер.
| Формат | Описание | Особенности |
|---|---|---|
| .ZIP | Стандартный архив | Поддержка в Windows без дополнительного ПО |
| .RAR | Архив с высокой степенью сжатия | Требуется WinRAR / 7Z |
| .7Z | Архив с максимальным сжатием | Требуется WinRAR / 7Z |
| .CAB | Системные архивы Windows, которые часто используются для драйверов и обновлений. | Используется для драйверов |
| .ISO | Образ оптического диска | Монтируется как виртуальный привод |
| .DMG | Формат для распространения программ (пакет для установки) на macOS | macOS |
| .DEB | Формат для распространения программ (пакет для установки) на Debian/Ubuntu | Debian/Ubuntu |
| .RPM | Формат для распространения программ (пакет для установки) на Red Hat/Fedora | Red Hat/Fedora |
| .APK | Пакет Android | Android |
| .IPA | Пакет iOS | iOS |
Есть один распространённый миф, связанный с архивацией. Задумался об этом буквально недавно - друг обратился с вопросом - «Я хотел архивировать данные - но почему после сжатия размер остался тем же?». Вот тут и работает такой миф, что архивирование всегда уменьшает объём файлов. Но это не так - когда создаётся архив (к примеру, RAR), программа пытается сжать данные, используя алгоритмы, которые идут как повторяющиеся фрагменты и кодируют их более компактно. И если файл уже сильно сжат (как в JPG, MP4, MP3, ZIP), или содержит случайные данные без закономерностей (зашифрованные файлы), то новый этап сжатия ничего не даёт, потому архив и получается того же размера, что и оригинал - или даже чуть больше из-за служебной информации.
В каком случае архивация эффективна, а когда бесполезна?
- Архивация эффективна для текстовых файлов - TXT, CSV, LOG, XML, HTML. Там много повторений слов, символов, пробелов, из-за чего они отлично сжимаются - до 90%.
- Необработанные данные так же отлично архивируются - это RAW изображения (BMP), WAV файлы, логи, дампы (выгрузки) баз данных, а также несжатые изображения TGA.
- Сжатые форматы повторно не сжать, поэтому архиватор не справится с видео (силами кодеков) - MP4, MKV, AVI, аудио - MP3, AAC, OGG, и конечно изображения - JPG, PNG, WEBP.
- Зашифрованные файлы тоже не архивируются, так как данные там случайные, из-за чего нет повторений. Случайные данные (в том числе генерируемые программно бинарные файлы без закономерностей), такие как результаты шифрования, хэши не будут сжаты.
Таким образом, архивация эффективна, когда файлы имеют высокую степень избыточности , то есть содержат много повторяющихся данных. А неэффективна, когда файлы уже оптимизированы или зашифрованы.
Алгоритмы архивации работают по принципу поиска паттернов в данных и замены их на более короткие коды. К примеру, если в тексте часто встречается слово «Навуходоносор», архиватор заменит его, к примеру, на короткий код #123. Это называется алгоритмом Хаффмана – оптимизация под частоту появления символов. Так же применяется LZ77/LZMA – поиск и замена повторяющихся последовательностей. И если же таких паттернов нет, то и сжать нечего.
Архивировать лучше для объединения множества мелких файлов (так обмениваться проще - если в папке 1000 файлов, лучше передать одним объединённым «пакетом»). На практике это работает так, что на сервере записи логов за каждый день могут весить, к примеру, 10 МБ, а через 100 дней - это уже 1 ГБ. И если сжать их, они будут занимать в пределах 200-300 МБ, что намного эффективнее для хранения.